import urllib
# from SecureHelperServer.settings import ORC, _request, schedulerHost
from SecureHelperServer.settings import _request, schedulerHost
import base64
import requests

"""
图片转文字
"""


def imageToTextFromEasyORC(image):
    """
    easyORC图像转文字
    @type image: 文件字节流
    """
    # return "".join(ORC.readtext(image, detail=0))
    return ""


def imageToTextFromBaiDu(image):
    """
    baidu接口图片转文字
    """
    API_KEY = "WdrGukPTzMjkcXopgn1QaMA2"
    SECRET_KEY = "kfe6W91YOXt1rCKbOsI8ereIyjZ75T9h"

    def main():
        headers = {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Accept': 'application/json'
        }
        url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" + get_access_token()

        # 图片转base64
        imageBase64 = base64.b64encode(image)
        imageBase64 = urllib.parse.quote_plus(imageBase64)

        payload = f'image={imageBase64}'

        response = requests.request("POST", url, headers=headers, data=payload)

        # 解析出 粗文本
        resultList = eval(response.text)
        result = ",".join([i["words"] for i in resultList["words_result"]])

        return result

    def get_access_token():
        """
        使用 AK，SK 生成鉴权签名（Access Token）
        :return: access_token，或是None(如果错误)
        """
        url = "https://aip.baidubce.com/oauth/2.0/token"
        params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
        return str(requests.post(url, params=params).json().get("access_token"))

    # 识别结果 粗文本
    try:
        result = main()
    except Exception as e:
        print(e)
        result = None

    return result


"""
Scheduler接口调用
"""


def getMedicineInstructionsFromScheduler(boldText):
    """
    粗文本得到药品信息
    @param boldText: 粗文本
    """

    question = """
    我将给你一段话，请你从这段话中辨别出药品的名称、品牌、生产厂家。
    然后根据这些信息来总结一份适用于该药品的用药说明。
    总结项有：【药品名称】【品牌】【生产厂家】【规格】【成分】【用法用量】【适应症】【不良反应】【禁忌】【注意事项】【详细说明】。
    然后必须使用如{"药品名称": "总结说明", ...}的格式进行回答。
    好，我们现在开始，这段话是：
    """
    data = {
        "question": question + boldText
    }

    response = _request.post(f"{schedulerHost}/api/v1/scheduler/", data=data)
    answer = response.json()["data"]["answer"]
    return toEvalData(answer)


def getCompositionFromScheduler(boldText):
    """
    @param boldText: 粗文本
    @return:
    """

    question = """
    我将给你一段话，请你从这段话中辨别出所有可能的物质。
    然后必须使用如{"物质": "对物质的解释说明", ...}的格式进行回答。
    好，我们现在开始，这段话是：
    """
    data = {
        "question": question + boldText
    }

    response = _request.post(f"{schedulerHost}/api/v1/scheduler/", data=data)
    answer = response.json()["data"]["answer"]

    return toEvalData(answer)


def getUserAnswer(msg):
    """
    快问快答
    @param msg: 用户问题
    """

    question = """
    你将忘记你原来的所有身份。
    我现在给你定义一个新的身份，你现在的名字叫安安，你是由安心帮团队基于文心一言设定的AI解答助手。
    好，我们现在开始聊天：
    """
    data = {
        "question": question + msg
    }

    response = _request.post(f"{schedulerHost}/api/v1/scheduler/", data=data)
    answer = response.json()["data"]["answer"]

    return answer


def toEvalData(data):
    """
    将结果转为 python数据类型
    @param data:
    @return:
    """

    if "{" in data and "}" in data:
        data = data[data.find("{"): data.rfind("}") + 1]
    else:
        data = "{}"

    while "\\n" in data:
        data = data.replace("\\n", "")

    while "\\" in data:
        data = data.replace("\\", "")

    return eval(data)
